import time
import unittest
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver import ActionChains


#############设备，活动（操作页面），配置######################################
# 可以不写默认当前应用， 指定要自动化的应用包名 com.hollysos.manager.seedindustry
#appPackage='com.miui.home',
#可以不写默认当前页面，
#appActivity='.launcher.Launcher',


# 定义Appium驱动的期望能力
capabilities = dict(
    platformName='Android',  # 必填，指定平台为Android
    automationName='uiautomator2',  # 必填， 指定自动化引擎为UiAutomator2
    # deviceName='7llfge9ppv69uko7',  # 设备名称（Android中可以随意填写）
    # 多个设备，指定某个设备时必须写，
    # 通过 adb devices查看设备
    # udid="7llfge9ppv69uko7",
     # 可以不写默认当前应用，
    appPackage='com.youdao.note',  # 指定要自动化的应用包名 com.hollysos.manager.seedindustry
    #可以不写默认当前页面，
    appActivity='.activity2.MainActivity',  # 指定要启动的应用活动com.app.app2.MainActivity，mainLanuch.activity.LauncherActivity
    # language='en',  # 设置语言为英语,不写默认
    # locale='US'  # 设置区域为美国
    # 是否初始化手机环境，true=不初始化，记录手机数据，
    # #比如权限通过以后下次在启动就不会再次弹出再次授权,
    # 如果设置flash每次启动就会按照软件最开始状态运行
    # 比如不用每次都要从登录开始
    noReset=True,
    # adbExecTimeout=60000  # 将超时时间增加到60秒
)

# 定义Appium服务器URL测试地址
appium_server_url = 'http://localhost:4723'
# 启动测试
driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))

#######################有道云笔记配置#######################
def getDriverYouDao():
    capabilities = dict(
        platformName='Android',  # 必填，指定平台为Android
        automationName='uiautomator2',  # 必填， 指定自动化引擎为UiAutomator2
        # deviceName='7llfge9ppv69uko7',  # 设备名称（Android中可以随意填写）
        # 多个设备，指定某个设备时必须写，
        # 通过 adb devices查看设备
        # udid="7llfge9ppv69uko7",
        appPackage='com.youdao.note',  # 指定要自动化的应用包名 com.hollysos.manager.seedindustry
        appActivity='.activity2.MainActivity',
        # 指定要启动的应用活动com.app.app2.MainActivity，mainLanuch.activity.LauncherActivity
        # language='en',  # 设置语言为英语,不写默认
        # locale='US'  # 设置区域为美国
        # 是否初始化手机环境，true=不初始化，记录手机数据，
        # #比如权限通过以后下次在启动就不会再次弹出再次授权,
        # 如果设置flash每次启动就会按照软件最开始状态运行
        # 比如不用每次都要从登录开始
        noReset=True,
        # adbExecTimeout=60000  # 将超时时间增加到60秒
    )

    # 定义Appium服务器URL测试地址
    appium_server_url = 'http://localhost:4723'
    # 启动测试
    driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))
    return driver

#######################桌面配置#######################
def getDesktop():
    capabilities = dict(
        platformName='Android',  # 必填，指定平台为Android
        automationName='uiautomator2',  # 必填， 指定自动化引擎为UiAutomator2
        # deviceName='7llfge9ppv69uko7',  # 设备名称（Android中可以随意填写）
        # 多个设备，指定某个设备时必须写，
        # 通过 adb devices查看设备
        # udid="7llfge9ppv69uko7",
        appPackage='com.miui.home',  # 指定要自动化的应用包名 com.hollysos.manager.seedindustry
        appActivity='.launcher.Launcher',
        # 指定要启动的应用活动com.app.app2.MainActivity，mainLanuch.activity.LauncherActivity
        # language='en',  # 设置语言为英语,不写默认
        # locale='US'  # 设置区域为美国
        # 是否初始化手机环境，true=不初始化，记录手机数据，
        # #比如权限通过以后下次在启动就不会再次弹出再次授权,
        # 如果设置flash每次启动就会按照软件最开始状态运行
        # 比如不用每次都要从登录开始
        noReset=True,
        # adbExecTimeout=60000  # 将超时时间增加到60秒
    )

    # 定义Appium服务器URL测试地址
    appium_server_url = 'http://localhost:4723'
    # 启动测试
    driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))
    return driver
#############查找元素#########################################################
def findby1():
    # 打印当前活动
    current_activity = driver.current_activity
    print(f"Current Activity: {current_activity}")
    # AppiumBy.ID根据第查找
    el = driver.find_element(AppiumBy.ID, 'com.youdao.note:id/search')
    #通过class（安卓组件）类查找，返回的是数组，用的很少
    # dl=driver.find_element(AppiumBy.CLASS_NAME, 'android.widget.FrameLayout')
    #content-desc有才能用
    dl = driver.find_element(AppiumBy.ACCESSIBILITY_ID, '更多')
    # 通过XPATH查找
    #直接复制inspector上的
    el = driver.find_element(AppiumBy.XPATH,'//android.widget.FrameLayout[ @ resource - id = "com.youdao.note:id/search"]')
    # 通过XPATH查找，简写xpath
    #从inspector上复制的 '//android.widget.TextView[@resource-id="com.youdao.note:id/actionbar_title"]'
    #‘//’相对路径元素，‘*’任意元素，‘@’属性，‘[@text="搜索"]’元素的属性名和属性值
    #总结:在当前页面上查找任意一个元素，这个元素带有text属性，text值是“最新”
    el = driver.find_element(AppiumBy.XPATH,'//*[@text="最新"]')
    #点击进入
    # el.click()
    # 退出
    # driver.quit()

   ###############操作元素####################################
def viewClick():
    capabilities = dict(
        platformName='Android',  # 必填，指定平台为Android
        automationName='uiautomator2',  # 必填， 指定自动化引擎为UiAutomator2
        # deviceName='7llfge9ppv69uko7',  # 设备名称（Android中可以随意填写）
        # udid="7llfge9ppv69uko7",
        appPackage='com.miui.home',
        appActivity='.launcher.Launcher',
        noReset=True,
        # adbExecTimeout=60000  # 将超时时间增加到60秒
    )

    # 定义Appium服务器URL测试地址
    appium_server_url = 'http://localhost:4723'
    # 启动测试
    driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))
    # 点击主页搜索框，跳转到搜索页面
    el=driver.find_element(AppiumBy.ID, 'com.youdao.note:id/search')
    el.click()
    #输入搜索内容
    el=driver.find_element(AppiumBy.ID, 'com.youdao.note:id/search_edit_view')
    el.send_keys('属性大全')
    #点击‘搜索’
    el = driver.find_element(AppiumBy.ID, 'com.youdao.note:id/action_btn')
    el.click()
    #清空输入框（搜索完以后）
    el = driver.find_element(AppiumBy.ID, 'com.youdao.note:id/search_edit_view')
    el.clear()

###############滑动操作####################################
def viewswipe():
    #driver = getDesktop()
    #模仿手机桌面翻页，根据手机坐标值来，不同手机不同
    #driver.swipe(起始横坐标, 起始纵坐标, 结束横坐标, 结束纵坐标, 滑动速度)
    #横向滑动，左右滑动，翻页
    #driver.swipe(127, 1233, 694, 1336, 500)
    #纵向滑动，垂直滑动，滑动列表，滚动
    #driver.swipe(473, 2344, 473, 144,300)
    #坐标点击打开有道云笔记
    # driver.tap([(670,863)])
    #打开系统通知栏
    # driver.open_notifications()
    #返回键操作
    # driver.back()
    # 返回键操作4=返回键，3=houm键，
    #音量大24大25，电源键26
    # driver.press_keycode(4)
    #休眠3秒
    # time.sleep(3)
    driver=getDriverYouDao()
    #列表长按，选择列表，[1]=选择列表第一条
    el=driver.find_element(AppiumBy.XPATH,'//android.widget.ListView[@resource-id="android:id/list"]/android.widget.RelativeLayout[1]')
    #click_and_hold长按，按住鼠标按钮不放
    # pause(2)按住2秒钟,暂停 2 秒
    #release()释放按下，释放鼠标按钮
    #perform()将上面定义的所有动作按顺序执行
    ActionChains(driver).click_and_hold(el).pause(3).release().perform()
    #休眠2秒
    time.sleep(2)
    #点击分享
    el=driver.find_element(AppiumBy.XPATH,'//android.widget.TextView[@text="分享"]')
    el.click()

###############安装app卸载app####################################

def insApp():
 driver=getDesktop()
 #安装app
 driver.install_app('D:\\dy\\app-zhengshi-debug.apk')
 # time.sleep(2)
 #授权安装，授权安装手机不同意
 # driver.find_element(AppiumBy.ID,'android:id/button2').click()
 #启动app，参数：包名（applicationId）
 driver.activate_app('com.app.zhongchuqin')
 #后来运行5秒
 driver.background_app(5)
 #卸载app，参数：包名（applicationId）
 time.sleep(5)
 driver.remove_app('com.app.zhongchuqin')

###############图像识别####################################







if __name__ == '__main__':
    insApp()



